import torch
GAME_NAME = "MountainCar-v0" # "CartPole-v1","Acrobot-v1","MountainCar-v0","LunarLander-v3"
GAME_UPPER_STEP = 500 # 对不同的环境先估计一条轨迹所用步数的大致上界，仅用于估算经验回放最大长度；对于可无限进行的环境，设置一个最大步数
REWARD_SCALE = 1.0 # 根据环境奖励大小调整

LEARNING_RATE = 2e-4 # 根据环境调整
TARGET_UPDATE = GAME_UPPER_STEP // 3 # 目标网络硬更新频率，因为一步一更新，所以这个值要比较大来稳定训练
TAU = 0.01 # 目标网络软更新速度，因为一步一更新，所以这个值要非常小来稳定训练
DISCOUNT_FACTOR = 0.98

NUM_EPISODES = 500 # 总共采样轨迹数目
EPSILON = 1.0
FINAL_EPSILON = 0.05
EPSILON_DECAY = (EPSILON-FINAL_EPSILON) / (NUM_EPISODES * 0.1) # 用前 X% 的轨迹数目完成衰减，最后 (1-X)% 保持不变

LEARNING_RANGE  = 10                               # 学习范围：大概最近n条轨迹
BUFFER_SIZE     = LEARNING_RANGE * GAME_UPPER_STEP  # 经验回放最大长度
BATCH_SIZE      = 256                              # 一次采样多少条经验用于训练更新，因为一步一更新，所以不要太大
MINIMAL_SIZE    = 4 * BATCH_SIZE                    # 从经验回放中有多少条经验开始训练

DQN_TYPE = "DoubleDQN" # "VanillaDQN" or "DoubleDQN"
HIDDEN_DIM = 128 # Qnet隐藏层维度
VIDEO_FREQ = NUM_EPISODES // 10 # 训练视频保存频率
DEVICE = torch.device("cuda" if torch.cuda.is_available() else "cpu")
